import telebot, sqlite3, random, time, config
bot = telebot.TeleBot(config.TOKEN)
db = sqlite3.connect('main.db', check_same_thread=False)
cursor = db.cursor()
names = ['Артём', 'Ния', 'Совви', 'Софин', 'Сычба', 'Филимон', 'Совунья', 'Ух', 'Пух', 'Снежок', 'Лучик', 'CyberСова', 'Сипи', 'Мисисипи']

mm = telebot.types.InlineKeyboardMarkup()
mm.add(telebot.types.InlineKeyboardButton('🦉Моя сова', callback_data='myowl'))
# mm.add(telebot.types.InlineKeyboardButton('💸Создать чек', callback_data='cheque')) # not implemented now
mm.add(telebot.types.InlineKeyboardButton('👥Реферальная программа', callback_data='ref'))

owlm = telebot.types.InlineKeyboardMarkup()
owlm.add(telebot.types.InlineKeyboardButton('🍓Покормить', callback_data='feed'))

def balance(uid):
    cursor.execute('SELECT balance FROM user WHERE id=?', (uid,))
    try:
        return cursor.fetchone()[0]
    except IndexError:
        pass

@bot.message_handler(commands=['start'])
def handle(msg):
    cursor.execute('SELECT balance FROM user WHERE id=?', (msg.from_user.id,))
    global r
    r = cursor.fetchone()
    if not r:
        if len(msg.text.split(' ')) > 1 and msg.text.split(' ')[1].startswith('ref') and msg.text.split(' ')[1].replace('ref', '').isnumeric():
            global refid
            refid = int(msg.text.split(' ')[1].replace('ref', ''))
            if not balance(refid) is None:
                cursor.execute('INSERT INTO referal (inv_id,user_id) VALUES (?,?)', (refid,msg.from_user.id))
                bot.send_message(refid, f'👥Пользователь {msg.from_user.first_name} ({msg.from_user.id}) присоеденился по вашей ссылке.')
                bot.send_message(msg.from_user.id, f'👥Вы были приглашены пользователем {refid}.')
        cursor.execute('INSERT INTO user (id) VALUES (?)', (msg.from_user.id,))
        bot.send_message(msg.from_user.id, '🦉Генерируем сову ...')
        cursor.execute('INSERT INTO owl (name,ft,owner,earnrate) VALUES (?,0,?,?)', (random.choice(names), msg.from_user.id, random.randint(1, 12)))
        db.commit()
    bot.send_message(msg.from_user.id, f'Баланс: {balance(msg.from_user.id)}\n\nСкорее посмотрите свою сову!', reply_markup=mm)

@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
    if call.data == 'myowl':
        cursor.execute('SELECT * FROM owl WHERE owner=?', (call.from_user.id,))
        global data
        data = cursor.fetchone()
        bot.send_message(call.from_user.id, f'Имя: {data[0]}\nДо следующего кормления: {max(round(3600 - (time.time() - data[1])), 0)} секунд.\nПрофитность: {data[3]} SVM за кормление.', reply_markup=owlm)
    elif call.data == 'feed':
        cursor.execute('SELECT ft,earnrate FROM owl WHERE owner=?', (call.from_user.id,))
        data = cursor.fetchone()
        global inv
        inv = None
        if cursor.execute('SELECT inv_id FROM referal WHERE user_id=?', (call.from_user.id,)):
            inv = cursor.fetchone()[0]
        if time.time() - data[0] > 3600:
            cursor.execute('UPDATE owl SET ft=? WHERE owner=?', (round(time.time()), call.from_user.id))
            cursor.execute('UPDATE user SET balance=? WHERE id=?', (balance(call.from_user.id) + data[1], call.from_user.id))
            if inv:
                cursor.execute('UPDATE user SET balance=? WHERE id=?', (balance(inv) + data[1] / 5,inv))
                bot.send_message(inv, f'👥Пользователь {call.from_user.id} покормил свою сову. Вы получили {data[1] / 5} SVM.')
            db.commit()
            bot.send_message(call.from_user.id, f'🎉Вы покормили сову и получили {data[1]} SVM!')
        else:
            bot.send_message(call.from_user.id, f'⌚️Сова ещё не голодна, подождите {round(3600 - (time.time() - data[0]))} секунд.')
    elif call.data == 'ref':
        bot.send_message(call.from_user.id, f'👥Ваша реферальная ссылка: https://t.me/{bot.get_me().username}?start=ref{call.from_user.id}\nВы будете получать 20% от заработка каждого реферала.')
bot.polling(non_stop=True)
